<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Symbol应用:
    // 1. 表示独一无二的值   => 消除魔术字符串
    // 2. 对象的属性名现在可以有两种类型，一种是原来就有的字符串，另一种就是新增的 Symbol 类型。凡是属性名属于 Symbol 类型，就都是独一无二的，可以保证不会与其他属性名产生冲突。


    // 消除魔术字符串
    // 魔术字符串指的是，在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。风格良好的代码，应该尽量消除魔术字符串，改由含义清晰的变量代替。


    // ===  数值和类型均相等 (官方指定)
    // 值类型:  "1" === "1"

    /* function calc(a, opt, b) {
        // a = 10  opt = "+"  b = 2
        var result = null;
        if (opt === "+") {
            result = a * 1 + b * 1;
        } else if (opt === "-") {
            result = a - b;
        } else if (opt === "*") {
            result = a * b;
        } else if (opt === "/") {
            result = a / b;
        } else if (opt === "%") {
            result = a % b;
        }
        return result;
    }

    var result = calc(10, "+", 2);
    console.log(result); */


    // 如何消除魔术字符串  => 传入的值和参与比较的值是同一个值,才满足条件
    // var options = {
    //     jia: "+",
    //     jian: "-",
    //     cheng: "*",
    //     chu: "/",
    //     yu: "%",
    // }

    var options = {
        jia: Symbol("+"),
        jian: Symbol("-"),
        cheng: Symbol("*"),
        chu: Symbol("/"),
        yu: Symbol("%"),
    }

    function calc(a, opt, b) {
        // a = 10  opt = "+"  b = 2
        var result = null;
        if (opt === options.jia) {
            result = a * 1 + b * 1;
        } else if (opt === options.jian) {
            result = a - b;
        } else if (opt === options.cheng) {
            result = a * b;
        } else if (opt === options.chu) {
            result = a / b;
        } else if (opt === options.yu) {
            result = a % b;
        }
        return result;
    }

    var result = calc(10, options.jia, 2);  // "+"
    console.log(result);



    

</script>

</html>